(0) Obligation:

JBC Problem based on JBC Program:
Manifest-Version: 1.0 Created-By: 1.6.0_16 (Sun Microsystems Inc.) Main-Class: example_1/Test
package example_1;

public class A {

int incr(int i) {
return i=i+1;
}
}


package example_1;

public class B extends A {
int incr(int i) {
return i = i+2;
}
}



package example_1;

public class C extends B {
int incr(int i) {
return i=i+3;
}
}


package example_1;

public class Test {

public int add(int n,A o){
int res=0;
int i=0;
while (i<=n){
res=res+i;
i=o.incr(i);
}
return res;
}

public static void main(String[] args) {
int test = 1000;
Test testClass = new Test();
A a = new A();
int result1 = testClass.add(test,a);
a = new B();
int result2 = testClass.add(test,a);
a = new C();
int result3 = testClass.add(test,a);
// System.out.println("Result: "+result1 + result2 + result3);
}
}


(1) JBC2FIG (SOUND transformation)

Constructed FIGraph.

(2) Obligation:

FIGraph based on JBC Program:
example_1.Test.main([Ljava/lang/String;)V: Graph of 153 nodes with 3 SCCs.


(3) FIGtoITRSProof (SOUND transformation)

Transformed FIGraph SCCs to IDPs. Logs:


Log for SCC 0:

Generated 20 rules for P and 5 rules for R.


Combined rules. Obtained 1 rules for P and 0 rules for R.


Filtered ground terms:


1080_1_main_InvokeMethod(x1, x2) → 1080_1_main_InvokeMethod(x1)
1080_0_add_Load(x1, x2, x3, x4) → 1080_0_add_Load(x3, x4)
Cond_1080_1_main_InvokeMethod(x1, x2, x3) → Cond_1080_1_main_InvokeMethod(x1, x2)

Filtered duplicate args:


1080_0_add_Load(x1, x2) → 1080_0_add_Load(x2)

Combined rules. Obtained 1 rules for P and 0 rules for R.


Finished conversion. Obtained 1 rules for P and 0 rules for R. System has predefined symbols.




Log for SCC 1:

Generated 20 rules for P and 56 rules for R.


Combined rules. Obtained 1 rules for P and 0 rules for R.


Filtered ground terms:


700_1_main_InvokeMethod(x1, x2, x3) → 700_1_main_InvokeMethod(x1)
700_0_add_Load(x1, x2, x3, x4) → 700_0_add_Load(x3, x4)
Cond_700_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_700_1_main_InvokeMethod(x1, x2)

Filtered duplicate args:


700_0_add_Load(x1, x2) → 700_0_add_Load(x2)

Combined rules. Obtained 1 rules for P and 0 rules for R.


Finished conversion. Obtained 1 rules for P and 0 rules for R. System has predefined symbols.




Log for SCC 2:

Generated 20 rules for P and 104 rules for R.


Combined rules. Obtained 1 rules for P and 0 rules for R.


Filtered ground terms:


237_1_main_InvokeMethod(x1, x2, x3) → 237_1_main_InvokeMethod(x1)
237_0_add_Load(x1, x2, x3, x4) → 237_0_add_Load(x3, x4)
Cond_237_1_main_InvokeMethod(x1, x2, x3, x4) → Cond_237_1_main_InvokeMethod(x1, x2)

Filtered duplicate args:


237_0_add_Load(x1, x2) → 237_0_add_Load(x2)

Combined rules. Obtained 1 rules for P and 0 rules for R.


Finished conversion. Obtained 1 rules for P and 0 rules for R. System has predefined symbols.


(4) Complex Obligation (AND)

(5) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0])) → COND_1080_1_MAIN_INVOKEMETHOD(x1[0] >= 0 && x1[0] <= 1000, 1080_0_add_Load(x1[0]))
(1): COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1])) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[1] + 3))

(0) -> (1), if ((x1[0] >= 0 && x1[0] <= 1000* TRUE)∧(1080_0_add_Load(x1[0]) →* 1080_0_add_Load(x1[1])))


(1) -> (0), if ((1080_0_add_Load(x1[1] + 3) →* 1080_0_add_Load(x1[0])))



The set Q is empty.

(6) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1)) → COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1, 0), <=(x1, 1000)), 1080_0_add_Load(x1)) the following chains were created:
  • We consider the chain 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0])) → COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0])), COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1])) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3))) which results in the following constraint:

    (1)    (&&(>=(x1[0], 0), <=(x1[0], 1000))=TRUE1080_0_add_Load(x1[0])=1080_0_add_Load(x1[1]) ⇒ 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0]))≥NonInfC∧1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0]))≥COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))∧(UIncreasing(COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))), ≥))



    We simplified constraint (1) using rules (I), (II), (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (>=(x1[0], 0)=TRUE<=(x1[0], 1000)=TRUE1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0]))≥NonInfC∧1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0]))≥COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))∧(UIncreasing(COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)







For Pair COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1)) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1, 3))) the following chains were created:
  • We consider the chain COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1])) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3))) which results in the following constraint:

    (6)    (COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1]))≥NonInfC∧COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1]))≥1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))∧(UIncreasing(1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))), ≥))



    We simplified constraint (6) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (7)    ((UIncreasing(1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))), ≥)∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (7) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (8)    ((UIncreasing(1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))), ≥)∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (8) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (9)    ((UIncreasing(1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))), ≥)∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (9) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (10)    ((UIncreasing(1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))), ≥)∧0 = 0∧[1 + (-1)bso_13] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1)) → COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1, 0), <=(x1, 1000)), 1080_0_add_Load(x1))
    • (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)

  • COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1)) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1, 3)))
    • ((UIncreasing(1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))), ≥)∧0 = 0∧[1 + (-1)bso_13] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(1080_1_MAIN_INVOKEMETHOD(x1)) = [1] + [-1]x1   
POL(1080_0_add_Load(x1)) = x1   
POL(COND_1080_1_MAIN_INVOKEMETHOD(x1, x2)) = [-1] + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(0) = 0   
POL(<=(x1, x2)) = [-1]   
POL(1000) = [1000]   
POL(+(x1, x2)) = x1 + x2   
POL(3) = [3]   

The following pairs are in P>:

1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0])) → COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))
COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1])) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(+(x1[1], 3)))

The following pairs are in Pbound:

1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[0])) → COND_1080_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 1080_0_add_Load(x1[0]))

The following pairs are in P:
none

There are no usable rules.

(7) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_1080_1_MAIN_INVOKEMETHOD(TRUE, 1080_0_add_Load(x1[1])) → 1080_1_MAIN_INVOKEMETHOD(1080_0_add_Load(x1[1] + 3))


The set Q is empty.

(8) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(9) TRUE

(10) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0])) → COND_700_1_MAIN_INVOKEMETHOD(x1[0] >= 0 && x1[0] <= 1000, 700_0_add_Load(x1[0]))
(1): COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1])) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[1] + 2))

(0) -> (1), if ((x1[0] >= 0 && x1[0] <= 1000* TRUE)∧(700_0_add_Load(x1[0]) →* 700_0_add_Load(x1[1])))


(1) -> (0), if ((700_0_add_Load(x1[1] + 2) →* 700_0_add_Load(x1[0])))



The set Q is empty.

(11) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1)) → COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1, 0), <=(x1, 1000)), 700_0_add_Load(x1)) the following chains were created:
  • We consider the chain 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0])) → COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0])), COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1])) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2))) which results in the following constraint:

    (1)    (&&(>=(x1[0], 0), <=(x1[0], 1000))=TRUE700_0_add_Load(x1[0])=700_0_add_Load(x1[1]) ⇒ 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0]))≥NonInfC∧700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0]))≥COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))∧(UIncreasing(COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))), ≥))



    We simplified constraint (1) using rules (I), (II), (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (>=(x1[0], 0)=TRUE<=(x1[0], 1000)=TRUE700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0]))≥NonInfC∧700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0]))≥COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))∧(UIncreasing(COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)







For Pair COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1)) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1, 2))) the following chains were created:
  • We consider the chain COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1])) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2))) which results in the following constraint:

    (6)    (COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1]))≥NonInfC∧COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1]))≥700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))∧(UIncreasing(700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))), ≥))



    We simplified constraint (6) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (7)    ((UIncreasing(700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))), ≥)∧[2 + (-1)bso_13] ≥ 0)



    We simplified constraint (7) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (8)    ((UIncreasing(700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))), ≥)∧[2 + (-1)bso_13] ≥ 0)



    We simplified constraint (8) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (9)    ((UIncreasing(700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))), ≥)∧[2 + (-1)bso_13] ≥ 0)



    We simplified constraint (9) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (10)    ((UIncreasing(700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))), ≥)∧0 = 0∧[2 + (-1)bso_13] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1)) → COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1, 0), <=(x1, 1000)), 700_0_add_Load(x1))
    • (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)

  • COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1)) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1, 2)))
    • ((UIncreasing(700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))), ≥)∧0 = 0∧[2 + (-1)bso_13] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(700_1_MAIN_INVOKEMETHOD(x1)) = [-1] + [-1]x1   
POL(700_0_add_Load(x1)) = x1   
POL(COND_700_1_MAIN_INVOKEMETHOD(x1, x2)) = [-1] + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(0) = 0   
POL(<=(x1, x2)) = [-1]   
POL(1000) = [1000]   
POL(+(x1, x2)) = x1 + x2   
POL(2) = [2]   

The following pairs are in P>:

COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1])) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(+(x1[1], 2)))

The following pairs are in Pbound:

700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0])) → COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))

The following pairs are in P:

700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0])) → COND_700_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 700_0_add_Load(x1[0]))

There are no usable rules.

(12) Complex Obligation (AND)

(13) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[0])) → COND_700_1_MAIN_INVOKEMETHOD(x1[0] >= 0 && x1[0] <= 1000, 700_0_add_Load(x1[0]))


The set Q is empty.

(14) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(15) TRUE

(16) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_700_1_MAIN_INVOKEMETHOD(TRUE, 700_0_add_Load(x1[1])) → 700_1_MAIN_INVOKEMETHOD(700_0_add_Load(x1[1] + 2))


The set Q is empty.

(17) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(18) TRUE

(19) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0])) → COND_237_1_MAIN_INVOKEMETHOD(x1[0] >= 0 && x1[0] <= 1000, 237_0_add_Load(x1[0]))
(1): COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1])) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[1] + 1))

(0) -> (1), if ((x1[0] >= 0 && x1[0] <= 1000* TRUE)∧(237_0_add_Load(x1[0]) →* 237_0_add_Load(x1[1])))


(1) -> (0), if ((237_0_add_Load(x1[1] + 1) →* 237_0_add_Load(x1[0])))



The set Q is empty.

(20) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1)) → COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1, 0), <=(x1, 1000)), 237_0_add_Load(x1)) the following chains were created:
  • We consider the chain 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0])) → COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0])), COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1])) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1))) which results in the following constraint:

    (1)    (&&(>=(x1[0], 0), <=(x1[0], 1000))=TRUE237_0_add_Load(x1[0])=237_0_add_Load(x1[1]) ⇒ 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0]))≥NonInfC∧237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0]))≥COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))∧(UIncreasing(COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))), ≥))



    We simplified constraint (1) using rules (I), (II), (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (>=(x1[0], 0)=TRUE<=(x1[0], 1000)=TRUE237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0]))≥NonInfC∧237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0]))≥COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))∧(UIncreasing(COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)







For Pair COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1)) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1, 1))) the following chains were created:
  • We consider the chain COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1])) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1))) which results in the following constraint:

    (6)    (COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1]))≥NonInfC∧COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1]))≥237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))∧(UIncreasing(237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))), ≥))



    We simplified constraint (6) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (7)    ((UIncreasing(237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))), ≥)∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (7) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (8)    ((UIncreasing(237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))), ≥)∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (8) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (9)    ((UIncreasing(237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))), ≥)∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (9) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (10)    ((UIncreasing(237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))), ≥)∧0 = 0∧[1 + (-1)bso_13] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1)) → COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1, 0), <=(x1, 1000)), 237_0_add_Load(x1))
    • (x1[0] ≥ 0∧[1000] + [-1]x1[0] ≥ 0 ⇒ (UIncreasing(COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x1[0] ≥ 0∧[(-1)bso_11] ≥ 0)

  • COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1)) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1, 1)))
    • ((UIncreasing(237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))), ≥)∧0 = 0∧[1 + (-1)bso_13] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(237_1_MAIN_INVOKEMETHOD(x1)) = [-1] + [-1]x1   
POL(237_0_add_Load(x1)) = x1   
POL(COND_237_1_MAIN_INVOKEMETHOD(x1, x2)) = [-1] + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(0) = 0   
POL(<=(x1, x2)) = [-1]   
POL(1000) = [1000]   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   

The following pairs are in P>:

COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1])) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(+(x1[1], 1)))

The following pairs are in Pbound:

237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0])) → COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))

The following pairs are in P:

237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0])) → COND_237_1_MAIN_INVOKEMETHOD(&&(>=(x1[0], 0), <=(x1[0], 1000)), 237_0_add_Load(x1[0]))

There are no usable rules.

(21) Complex Obligation (AND)

(22) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[0])) → COND_237_1_MAIN_INVOKEMETHOD(x1[0] >= 0 && x1[0] <= 1000, 237_0_add_Load(x1[0]))


The set Q is empty.

(23) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(24) TRUE

(25) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_237_1_MAIN_INVOKEMETHOD(TRUE, 237_0_add_Load(x1[1])) → 237_1_MAIN_INVOKEMETHOD(237_0_add_Load(x1[1] + 1))


The set Q is empty.

(26) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(27) TRUE